package com.atguigu.java;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

/**
 * Collection接口中声明的方法测试
 *结论：
 * 向Collection接口的实现类的对象中添加数据obj时，要求obj所在类要重写equals().
 *
 *
 *
 */
public class CollectionTest {
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
//        Person p = new Person("Jerry",16);
//        coll.add(p);
        coll.add(new Person("Jerry",16));
        coll.add(new String ("Tom"));
        coll.add(false);

        //1.contains(Object obj):判断当前集合是否包含obj
        //我们在判断时会调用obj对象所在类的equals()方法
        boolean contains = coll.contains(123);
        System.out.println(contains);//true

        System.out.println(coll.contains(new String("Tom")));//true
//        System.out.println(coll.contains(p));//true
        System.out.println(coll.contains(new Person("Jerry",16)));//false ----> //true

        //2.containsAll(Collection coll1):判断形参coll1中所有元素是否都存在于当前集合中
        Collection coll1 = Arrays.asList(123,456);
        boolean All = coll.containsAll(coll1);
        System.out.println(All);//true
    }

    @Test
    public void test2(){
        //3.remove(Object obj):从当前集合中移除obj元素
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",16));
        coll.add(new String ("Tom"));
        coll.add(false);

        boolean r = coll.remove(1234);
        System.out.println(coll);

        coll.remove(new Person("Jerry",16));
        System.out.println(coll);

        //4.removeAll(Collection coll1):差集：从当前集合中移除coll1中所有元素
        Collection coll1 = Arrays.asList(123,456);
        coll.removeAll(coll1);
        System.out.println(coll);
    }

    @Test
    public void test3(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new Person("Jerry",16));
        coll.add(new String ("Tom"));
        coll.add(false);

        //5.retainAll():交集，获取当前集合和coll1之间的交集，并返回给当前集合
//        Collection coll1 = Arrays.asList(123,456,789);
//        coll.retainAll(coll1);
//        System.out.println(coll);

        //6.equals(Object obj):要想返回ture，需要判断当前集合和形参的元素都相同（由于Collection是有序的，所以所有的集合元素必须顺序一样）
        Collection coll1 = new ArrayList();
        coll1.add(456);
        coll1.add(123);
        coll1.add(new Person("Jerry",16));
        coll1.add(new String ("Tom"));
        coll1.add(false);

        System.out.println(coll1.equals(coll));
    }

    @Test
    public void test4(){
        Collection coll1 = new ArrayList();
        coll1.add(123);
        coll1.add(456);
        coll1.add(new Person("Jerry",16));
        coll1.add(new String ("Tom"));
        coll1.add(false);

        //7.hashCode():返回当前对象的哈希值
        System.out.println(coll1.hashCode());

        //8.toArray():集合 ----> 数组
        Object[] arr = coll1.toArray();
        for(int i = 0;i < arr.length;i++){
            System.out.println(arr[i]);
        }

        //拓展：(Arrays类的静态方法asList())Arrays.asList():数组 ---> 集合
        List<String> list = Arrays.asList(new String[]{"AA", "BB", "CC"});
        System.out.println(list);

        //如果按照String的方式来写int或者其他类型的数组，则转换成集合输出时，系统会认为这是一个值而不是数组
        List list1 = Arrays.asList(new int[]{1, 2, 3, 4});
        System.out.println(list1);//[[I@2b05039f]
        System.out.println(list1.size());//1

        //方式一：
        List<Integer> list2 = Arrays.asList(1, 2, 3, 4);
        System.out.println(list2);//[1, 2, 3, 4]
        System.out.println(list2.size());//4

        //方式二：
        List<Integer> list3 = Arrays.asList(new Integer[]{1, 2, 3, 4});
        System.out.println(list3);//[1, 2, 3, 4]
        System.out.println(list3.size());//4

        //9.iterator():返回Iterator接口实例，用于遍历集合元素，放在IteratorTest.java中测试
    }
}
